home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 351-375 / disk_356 / algorhythms / source / menus.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  17KB  |  446 lines

  1. /* menus.c */
  2. /* Copyright 1990 Thomas E. Janzen All Rights Reserved */
  3. /*
  4. **  FACILITY:
  5. **
  6. **    AlgoRhythms music improviser on Commodore (TM) Amiga (TM)
  7. **    compiled with Lattice (TM) C 5.05
  8. **
  9. **  ABSTRACT:
  10. **
  11. **    Algorhythms improvises music over the MIDI serial port.
  12. **
  13. **  AUTHORS: Thomas E. Janzen
  14. **
  15. **  CREATION DATE:    26-MAR-1990
  16. **
  17. **  MODIFICATION HISTORY:
  18. **    DATE    NAME    DESCRIPTION
  19. **--
  20. */
  21. #include <intuition/intuition.h>
  22. #include <graphics/text.h>
  23. #include <proto/dos.h>
  24. #include <proto/graphics.h>
  25. #include <proto/exec.h>
  26. #include <proto/mathffp.h>
  27. #include <proto/intuition.h>
  28.  
  29. #define PROJTITLWID 68 /* width of project menu header */
  30. #define FORMTITLWID 48 /* width of form menu header */
  31. #define SCALETITLWID 48 /* width of scale title header */
  32. #define PROJECTWIDTH (80+COMMWIDTH) /* width of project menu items */
  33. #define FORMWIDTH (100+COMMWIDTH)  /* width of form menu items */
  34. #define SCALEWIDTH 125 /* width of scale menu items */
  35. #define SUBWIDTH 106 /* width of form sub-menu items */
  36.  
  37. extern struct GfxBase *GfxBase;
  38. extern struct IntuitionBase *IntuitionBase;
  39. extern struct DOSBase *DOSBase;
  40. extern struct MathBase *MathBase;
  41.  
  42. extern struct Window *w;
  43.  
  44.  
  45. /*Voice items*/
  46. const static char Voice15String[]="Voice 15";
  47. const static struct IntuiText Voice15Txt={2,1,JAM1,0,0,NULL,Voice15String,NULL};
  48. static struct MenuItem Voice15Item={NULL,0,120,80,8,
  49.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice15Txt,NULL,0,
  50.     NULL,0};
  51. const static char Voice14String[]="Voice 14";
  52. const static struct IntuiText Voice14Txt={2,1,JAM1,0,0,NULL,Voice14String,NULL};
  53. static struct MenuItem Voice14Item={&Voice15Item,0,112,80,8,
  54.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice14Txt,NULL,0,
  55.     NULL,0};
  56. const static char Voice13String[]="Voice 13";
  57. const static struct IntuiText Voice13Txt={2,1,JAM1,0,0,NULL,Voice13String,NULL};
  58. static struct MenuItem Voice13Item={&Voice14Item,0,104,80,8,
  59.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice13Txt,NULL,0,
  60.     NULL,0};
  61. const static char Voice12String[]="Voice 12";
  62. const static struct IntuiText Voice12Txt={2,1,JAM1,0,0,NULL,Voice12String,NULL};
  63. static struct MenuItem Voice12Item={&Voice13Item,0,96,80,8,
  64.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice12Txt,NULL,0,
  65.     NULL,0};
  66. const static char Voice11String[]="Voice 11";
  67. const static struct IntuiText Voice11Txt={2,1,JAM1,0,0,NULL,Voice11String,NULL};
  68. static struct MenuItem Voice11Item={&Voice12Item,0,88,80,8,
  69.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice11Txt,NULL,0,
  70.     NULL,0};
  71. const static char Voice10String[]="Voice 10";
  72. const static struct IntuiText Voice10Txt={2,1,JAM1,0,0,NULL,Voice10String,NULL};
  73. static struct MenuItem Voice10Item={&Voice11Item,0,80,80,8,
  74.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice10Txt,NULL,0,
  75.     NULL,0};
  76. const static char Voice9String[]="Voice  9";
  77. const static struct IntuiText Voice9Txt={2,1,JAM1,0,0,NULL,Voice9String,NULL};
  78. static struct MenuItem Voice9Item={&Voice10Item,0,72,80,8,
  79.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice9Txt,NULL,0,
  80.     NULL,0};
  81. const static char Voice8String[]="Voice  8";
  82. const static struct IntuiText Voice8Txt={2,1,JAM1,0,0,NULL,Voice8String,NULL};
  83. static struct MenuItem Voice8Item={&Voice9Item,0,64,80,8,
  84.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice8Txt,NULL,0,
  85.     NULL,0};
  86. const static char Voice7String[]="Voice  7";
  87. const static struct IntuiText Voice7Txt={2,1,JAM1,0,0,NULL,Voice7String,NULL};
  88. static struct MenuItem Voice7Item={&Voice8Item,0,56,80,8,
  89.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice7Txt,NULL,0,
  90.     NULL,0};
  91. const static char Voice6String[]="Voice  6";
  92. const static struct IntuiText Voice6Txt={2,1,JAM1,0,0,NULL,Voice6String,NULL};
  93. static struct MenuItem Voice6Item={&Voice7Item,0,48,80,8,
  94.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice6Txt,NULL,0,
  95.     NULL,0};
  96. const static char Voice5String[]="Voice  5";
  97. const static struct IntuiText Voice5Txt={2,1,JAM1,0,0,NULL,Voice5String,NULL};
  98. static struct MenuItem Voice5Item={&Voice6Item,0,40,80,8,
  99.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice5Txt,NULL,0,
  100.     NULL,0};
  101. const static char Voice4String[]="Voice  4";
  102. const static struct IntuiText Voice4Txt={2,1,JAM1,0,0,NULL,Voice4String,NULL};
  103. static struct MenuItem Voice4Item={&Voice5Item,0,32,80,8,
  104.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice4Txt,NULL,0,
  105.     NULL,0};
  106. const static char Voice3String[]="Voice  3";
  107. const static struct IntuiText Voice3Txt={2,1,JAM1,0,0,NULL,Voice3String,NULL};
  108. static struct MenuItem Voice3Item={&Voice4Item,0,24,80,8,
  109.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice3Txt,NULL,0,
  110.     NULL,0};
  111. const static char Voice2String[]="Voice  2";
  112. const static struct IntuiText Voice2Txt={2,1,JAM1,0,0,NULL,Voice2String,NULL};
  113. static struct MenuItem Voice2Item={&Voice3Item,0,16,80,8,
  114.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice2Txt,NULL,0,
  115.     NULL,0};
  116. const static char Voice1String[]="Voice  1";
  117. const static struct IntuiText Voice1Txt={2,1,JAM1,0,0,NULL,Voice1String,NULL};
  118. static struct MenuItem Voice1Item={&Voice2Item,0,8,80,8,
  119.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice1Txt,NULL,0,
  120.     NULL,0};
  121. const static char Voice0String[]="Voice  0";
  122. const static struct IntuiText Voice0Txt={2,1,JAM1,0,0,NULL,Voice0String,NULL};
  123. static struct MenuItem Voice0Item={&Voice1Item,0,0,80,8,
  124.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&Voice0Txt,NULL,0,
  125.     NULL,0};
  126.  
  127. const char ChannelMenuString[16]="Channel";
  128. static struct Menu ChannelMenu = 
  129.     {NULL,PROJTITLWID+FORMTITLWID+SCALETITLWID,0,
  130.     80,0,MIDRAWN|MENUENABLED,
  131.     ChannelMenuString,&Voice0Item};
  132.  
  133. /*Scale Menu */
  134.  
  135. const char ChromaticString[16]="Chromatic"; /* 11 */
  136. const static struct IntuiText ChromaticTxt={2,1,JAM1,CHECKWIDTH,0,NULL,
  137.     ChromaticString,NULL};
  138. static struct MenuItem ChromaticItem={NULL,0,0,CHECKWIDTH+129,8,
  139.     (CHECKIT|ITEMTEXT|HIGHCOMP|ITEMENABLED),0x07FE,
  140.     (APTR)&ChromaticTxt,NULL,0,NULL,0};
  141.  
  142. const char ShortPentaString[32]="Short Pentatonic"; /* 10 ;16letters*/
  143. const static struct IntuiText ShortPentaTxt={2,1,JAM1,CHECKWIDTH,0,NULL,
  144.     ShortPentaString,NULL};
  145. static struct MenuItem ShortPentaItem={&ChromaticItem,0,8,CHECKWIDTH+129,
  146.     8,(CHECKIT|ITEMTEXT|HIGHCOMP|ITEMENABLED),0x0BFE,
  147.     (APTR)&ShortPentaTxt,NULL,0,NULL,0};
  148.  
  149. const char HiraString[16]="hira joshi"; /* 9 */
  150. const static struct IntuiText HiraTxt=
  151.     {2,1,JAM1,CHECKWIDTH,0,NULL,HiraString,NULL};
  152. static struct MenuItem HiraItem={&ShortPentaItem,0,16,CHECKWIDTH+129,8,
  153.     (CHECKIT|ITEMTEXT|HIGHCOMP|ITEMENABLED),0x0DFE,
  154.     (APTR)&HiraTxt,NULL,0,NULL,0};
  155.  
  156. const char KumoiString[16]="kumoi joshi"; /* 8 */
  157. const static struct IntuiText KumoiTxt={2,1,JAM1,CHECKWIDTH,0,NULL,KumoiString,
  158.     NULL};
  159. static struct MenuItem KumoiItem={&HiraItem,0,24,CHECKWIDTH+129,8,
  160.     (CHECKIT|ITEMTEXT|HIGHCOMP|ITEMENABLED),0x0EFE,
  161.     (APTR)&KumoiTxt,NULL,0,NULL,0};
  162.  
  163. const char KokinString[16]="kokin joshi"; /* 7 */
  164. const static struct IntuiText KokinTxt=
  165.     {2,1,JAM1,CHECKWIDTH,0,NULL,KokinString,NULL};
  166. static struct MenuItem KokinItem={&KumoiItem,0,32,CHECKWIDTH+129,8,
  167.     (CHECKIT|ITEMTEXT|HIGHCOMP|ITEMENABLED),0x0F7E,
  168.     (APTR)&KokinTxt,NULL,0,NULL,0};
  169.  
  170. const char WholeToneString[16]="Whole Tone"; /* 6 */
  171. const static struct IntuiText WholeToneTxt=
  172.     {2,1,JAM1,CHECKWIDTH,0,NULL,WholeToneString,NULL};
  173. static struct MenuItem WholeToneItem={&KokinItem,0,40,CHECKWIDTH+129,8,
  174.     (CHECKIT|ITEMTEXT|HIGHCOMP|ITEMENABLED),0x00FBE,
  175.     (APTR)&WholeToneTxt,NULL,0,NULL,0};
  176.  
  177. const char DiatonicString[16]="Diatonic"; /* 5 */
  178. const static struct IntuiText DiatonicTxt=
  179.     {2,1,JAM1,CHECKWIDTH,0,NULL,DiatonicString,NULL};
  180. static struct MenuItem DiatonicItem={&WholeToneItem,0,48,CHECKWIDTH+129,8,
  181.     (CHECKIT|ITEMTEXT|HIGHCOMP|ITEMENABLED),0x00FDE,
  182.     (APTR)&DiatonicTxt,NULL,0,NULL,0};
  183.  
  184. const char HarmonicString[16]="Harmonic Minor"; /* 4 */
  185. const static struct IntuiText HarmonicTxt=
  186.     {2,1,JAM1,CHECKWIDTH,0,NULL,HarmonicString,NULL};
  187. static struct MenuItem HarmonicItem={&DiatonicItem,0,56,CHECKWIDTH+129,8,
  188.     (CHECKIT|ITEMTEXT|HIGHCOMP|ITEMENABLED),0x00FEE,
  189.     (APTR)&HarmonicTxt,NULL,0,NULL,0};
  190.  
  191. const char HungarianString[16]="Hungarian Minor"; /* 3 */
  192. const static struct IntuiText HungarianTxt=
  193.     {2,1,JAM1,CHECKWIDTH,0,NULL,HungarianString,NULL};
  194. static struct MenuItem HungarianItem={&HarmonicItem,0,64,CHECKWIDTH+129,8,
  195.     (CHECKIT|ITEMTEXT|HIGHCOMP|ITEMENABLED),0x00FF6,
  196.     (APTR)&HungarianTxt,NULL,0,NULL,0};
  197.  
  198. const char DiminishedString[16]="Diminished"; /* 2 */
  199. const static struct IntuiText DiminishedTxt=
  200.     {2,1,JAM1,CHECKWIDTH,0,NULL,DiminishedString,NULL};
  201. static struct MenuItem DiminishedItem=
  202.     {&HungarianItem,0,72,CHECKWIDTH+129,8,
  203.     (CHECKIT|ITEMTEXT|HIGHCOMP|ITEMENABLED),0x00FFA,
  204.     (APTR)&DiminishedTxt,NULL,0,NULL,0};
  205.  
  206. const char LongPentaString[16]="Long Pentatonic"; /* 1 */
  207. const static struct IntuiText LongPentaTxt=
  208.     {2,1,JAM1,CHECKWIDTH,0,NULL,LongPentaString,NULL};
  209. static struct MenuItem LongPentaItem=
  210.     {&DiminishedItem,0,80,CHECKWIDTH+129,8,
  211.     (CHECKIT|ITEMTEXT|HIGHCOMP|ITEMENABLED),0x00FFC,
  212.     (APTR)&LongPentaTxt,NULL,0,NULL,0};
  213.  
  214. const char TransposeString[16]="Transpose"; /* 0 */
  215. const static struct IntuiText TransposeTxt=
  216.     {2,1,JAM1,0,0,NULL,TransposeString,NULL};
  217. static struct MenuItem TransposeItem=
  218.     {&LongPentaItem,0,88,CHECKWIDTH+129,8,
  219.         (ITEMTEXT|HIGHCOMP|COMMSEQ|ITEMENABLED),
  220.         0,(APTR)&TransposeTxt,NULL,(BYTE)'T',NULL,0};
  221.  
  222. const char ScaleString[16]="Scale";
  223. static struct Menu ScaleMenu = 
  224.     {&ChannelMenu,PROJTITLWID+FORMTITLWID,0,
  225.     SCALETITLWID,0,MIDRAWN|MENUENABLED,
  226.     ScaleString,&TransposeItem};
  227.  
  228. /* Character menus */
  229. const char MeanPeriodString[16]="Mean Period";
  230. static struct IntuiText MeanPeriodTxt=
  231.     {2,1,JAM1,0,0,NULL,MeanPeriodString,NULL};
  232. static struct MenuItem MeanPeriodItem={NULL,
  233.     FORMWIDTH-2,0,SUBWIDTH,8,
  234.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&MeanPeriodTxt,
  235.     NULL,0,NULL,0};
  236.  
  237. const char MeanPhaseString[16]="Mean Phase";
  238. const static struct IntuiText MeanPhaseTxt=
  239.     {2,1,JAM1,0,0,NULL,MeanPhaseString,NULL};
  240. static struct MenuItem MeanPhaseItem={&MeanPeriodItem,
  241.     FORMWIDTH-2,8,SUBWIDTH,8,
  242.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&MeanPhaseTxt,
  243.     NULL,0,NULL,0};
  244.  
  245. const char SpreadPeriodString[16]="Spread Period";
  246. const static struct IntuiText SpreadPeriodTxt=
  247.     {2,1,JAM1,0,0,NULL,SpreadPeriodString,NULL};
  248. static struct MenuItem SpreadPeriodItem={&MeanPhaseItem,
  249.     FORMWIDTH-2,16,SUBWIDTH,8,
  250.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,
  251.     (APTR)&SpreadPeriodTxt,NULL,0,NULL,0};
  252.  
  253. const char SpreadPhaseString[16]="Spread Phase";
  254. const static struct IntuiText SpreadPhaseTxt=
  255.     {2,1,JAM1,0,0,NULL,SpreadPhaseString,NULL};
  256. static struct MenuItem SpreadPhaseItem={&SpreadPeriodItem,
  257.     FORMWIDTH-2,24,SUBWIDTH,8,
  258.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&SpreadPhaseTxt,
  259.     NULL,0,NULL,0};
  260.  
  261. const char RandomizeString[16]="Randomize";
  262. const static struct IntuiText RandomizeTxt=
  263.     {2,1,JAM1,0,0,NULL,RandomizeString,NULL};
  264. static struct MenuItem RandomizeItem={&SpreadPhaseItem,
  265.     FORMWIDTH-2,32,SUBWIDTH,8,
  266.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&RandomizeTxt,
  267.     NULL,0,NULL,0};
  268.  
  269. const char MaxVoicesString[]="Max Voices";
  270. const static struct IntuiText MaxVoicesTxt={2,1,JAM1,0,0,NULL,
  271.     MaxVoicesString,NULL};
  272. static struct MenuItem MaxVoicesItem={NULL,0,0,FORMWIDTH,8,
  273.     (ITEMTEXT|COMMSEQ|HIGHCOMP|ITEMENABLED),0,
  274.     (APTR)&MaxVoicesTxt,NULL,(BYTE)'V',NULL,0};
  275.  
  276. const char ReDrawString[8]="Redraw";
  277. const static struct IntuiText ReDrawTxt={2,1,JAM1,0,0,NULL,ReDrawString,NULL};
  278. static struct MenuItem ReDrawItem={&MaxVoicesItem,0,8,FORMWIDTH,8,
  279.     (ITEMTEXT|COMMSEQ|HIGHCOMP|ITEMENABLED),0,(APTR)&ReDrawTxt,
  280.     NULL,(BYTE)'R',NULL,0};
  281.  
  282. const char PulseString[16]="Pulse";
  283. const static struct IntuiText PulseTxt={2,1,JAM1,0,0,NULL,PulseString,NULL};
  284. static struct MenuItem PulseItem={&ReDrawItem,0,16,FORMWIDTH,8,
  285.     (ITEMTEXT|COMMSEQ|HIGHCOMP|ITEMENABLED),0,(APTR)&PulseTxt,NULL,
  286.     (BYTE)'N',NULL,0};
  287.  
  288. const char DurationString[16]="Duration";
  289. const static struct IntuiText DurationTxt=
  290.     {2,1,JAM1,0,0,NULL,DurationString,NULL};
  291. static struct MenuItem DurationItem={&PulseItem,0,24,FORMWIDTH,8,
  292.     (ITEMTEXT|COMMSEQ|HIGHCOMP|ITEMENABLED),0,(APTR)&DurationTxt,
  293.     NULL,(BYTE)'D',NULL,0};
  294.  
  295. const char PitchString[16]="Pitch";
  296. const static struct IntuiText PitchTxt={2,1,JAM1,0,0,NULL,PitchString,NULL};
  297. static struct MenuItem PitchItem={&DurationItem,0,32,FORMWIDTH,8,
  298.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&PitchTxt,NULL,0,
  299.     &RandomizeItem,0};
  300.  
  301. const char RhythmString[16]="Rhythm";
  302. const static struct IntuiText RhythmTxt={2,1,JAM1,0,0,NULL,RhythmString,NULL};
  303. static struct MenuItem RhythmItem={&PitchItem,0,40,FORMWIDTH,8,
  304.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&RhythmTxt,NULL,0,
  305.     &RandomizeItem,0};
  306.  
  307. const char DynamicString[16]="Dynamic";
  308. const static struct IntuiText DynamicTxt={2,1,JAM1,0,0,NULL,DynamicString,NULL};
  309. static struct MenuItem DynamicItem={&RhythmItem,0,48,FORMWIDTH,8,
  310.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&DynamicTxt,NULL,0,
  311.     &RandomizeItem,0};
  312.  
  313. const static struct IntuiText TSpreadPhaseTxt=
  314.     {2,1,JAM1,0,0,NULL,SpreadPhaseString,NULL};
  315. static struct MenuItem TSpreadPhaseItem={NULL,
  316.     FORMWIDTH-5,0,SUBWIDTH,8,
  317.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&TSpreadPhaseTxt,
  318.         NULL,0,NULL,0};
  319.  
  320. const static struct IntuiText TSpreadPeriodTxt=
  321.     {2,1,JAM1,0,0,NULL,SpreadPeriodString,NULL};
  322. static struct MenuItem TSpreadPeriodItem={&TSpreadPhaseItem,
  323.     FORMWIDTH-5,8,SUBWIDTH,8,
  324.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,
  325.     (APTR)&TSpreadPeriodTxt,NULL,0,NULL,0};
  326.  
  327. const static struct IntuiText TRandomizeTxt=
  328.     {2,1,JAM1,0,0,NULL,RandomizeString,NULL};
  329. static struct MenuItem TRandomizeItem={&TSpreadPeriodItem,
  330.     FORMWIDTH-2,16,SUBWIDTH,8,
  331.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&TRandomizeTxt,
  332.     NULL,0,NULL,0};
  333.  
  334. const char TextureString[16]="Texture";
  335. const static struct IntuiText TextureTxt={2,1,JAM1,0,0,NULL,TextureString,NULL};
  336. static struct MenuItem TextureItem={&DynamicItem,0,56,FORMWIDTH,8,
  337.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&TextureTxt,NULL,0,
  338.     &TRandomizeItem,0};
  339.  
  340. const char MaximumString[16]="Maximum";
  341. const static struct IntuiText MaximumTxt=
  342. {2,1,JAM1,0,0,NULL,MaximumString,NULL};
  343. static struct MenuItem MaximumItem={NULL,FORMWIDTH-2,8,SUBWIDTH,8,
  344.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&MaximumTxt,NULL,0,
  345.     NULL,0};
  346.  
  347. const char MinimumString[16]="Minimum";
  348. const static struct IntuiText MinimumTxt={2,1,JAM1,0,0,NULL,
  349.     MinimumString,NULL};
  350. static struct MenuItem MinimumItem={&MaximumItem,
  351.     FORMWIDTH-2,0,SUBWIDTH,8,
  352.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&MinimumTxt,NULL,0,
  353.     NULL,0};
  354.  
  355. const char NoteLenString[16]="Note Length";
  356. const static struct IntuiText NoteLenTxt={2,1,JAM1,0,0,NULL,
  357.     NoteLenString,NULL};
  358. static struct MenuItem NoteLenItem={&TextureItem,0,64,FORMWIDTH,8,
  359.     (ITEMTEXT|HIGHCOMP|ITEMENABLED),0,(APTR)&NoteLenTxt,NULL,0,
  360.     &MinimumItem,0};
  361.  
  362. const char FormString[16]="Form";
  363. static struct Menu FormMenu = {&ScaleMenu,
  364.     PROJTITLWID,0,FORMTITLWID,
  365.     0,(MIDRAWN|MENUENABLED),FormString,&NoteLenItem};
  366.  
  367. /*Project Menu*/
  368. const char PlayString[16]="Play";
  369. const static struct IntuiText PlayTxt={2,1,JAM1,0,0,NULL,PlayString,NULL};
  370. static struct MenuItem PlayItem={NULL,0,0,PROJECTWIDTH,8,
  371. (ITEMTEXT|COMMSEQ|HIGHCOMP|ITEMENABLED),0,(APTR)&PlayTxt,NULL,
  372. (BYTE)'P',NULL,0};
  373.     
  374. const char StopString[16]="Stop";
  375. const static struct IntuiText StopTxt={2,1,JAM1,0,0,NULL,StopString,NULL};
  376. static struct MenuItem StopItem={&PlayItem,0,8,PROJECTWIDTH,8,
  377. (ITEMTEXT|COMMSEQ|HIGHCOMP|ITEMENABLED),0,(APTR)&StopTxt,NULL,(BYTE)'S',
  378. NULL,0};
  379.  
  380. const char ContinueString[16]="Continue";
  381. const static struct IntuiText ContinueTxt={2,1,JAM1,0,0,NULL,
  382.     ContinueString,NULL};
  383. static struct MenuItem ContinueItem={&StopItem,0,16,PROJECTWIDTH,8,
  384. (ITEMTEXT|COMMSEQ|HIGHCOMP|ITEMENABLED),0,(APTR)&ContinueTxt,NULL,
  385. (BYTE)'C',NULL,0};
  386.  
  387. const char LoadString[16]="Load";
  388. const static struct IntuiText LoadTxt={2,1,JAM1,0,0,NULL,LoadString,NULL};
  389. static struct MenuItem LoadItem={&ContinueItem,0,24,PROJECTWIDTH,8,
  390. (ITEMTEXT|HIGHCOMP|COMMSEQ|ITEMENABLED),0,(APTR)&LoadTxt,NULL,(BYTE)'L',
  391. NULL,0};
  392.  
  393. const char SaveString[16]="Save";
  394. const static struct IntuiText SaveTxt={2,1,JAM1,0,0,NULL,SaveString,NULL};
  395. static struct MenuItem SaveItem={&LoadItem,0,32,PROJECTWIDTH,8,
  396. (ITEMTEXT|HIGHCOMP|COMMSEQ|ITEMENABLED),0,(APTR)&SaveTxt,NULL,
  397. (BYTE)'F',NULL,0};
  398.  
  399. const char AboutString[16]="About";
  400. const static struct IntuiText AboutTxt=
  401.     {2,1,JAM1,0,0,NULL,AboutString,NULL};
  402. static struct MenuItem AboutItem={&SaveItem,0,40,PROJECTWIDTH,8,
  403. (ITEMTEXT|HIGHCOMP|COMMSEQ|ITEMENABLED),0,(APTR)&AboutTxt,NULL,
  404. (BYTE)'A',NULL,0};
  405.  
  406. const char QuitString[16]="Quit";
  407. const static struct IntuiText QuitTxt={2,1,JAM1,0,0,NULL,QuitString,NULL};
  408. static struct MenuItem QuitItem={&AboutItem,0,48,PROJECTWIDTH,8,
  409. (ITEMTEXT|COMMSEQ|HIGHCOMP|ITEMENABLED),0,(APTR)&QuitTxt,NULL,(BYTE)'Q',
  410. NULL,0};
  411.  
  412. const char ProjectString[16]="Project";
  413. static struct Menu ProjectMenu = {&FormMenu,0,0,
  414.     PROJTITLWID,0,
  415.     MIDRAWN|MENUENABLED,ProjectString,&QuitItem};
  416.  
  417. void Init_Menu(void) {
  418.     SetMenuStrip(w,&ProjectMenu);
  419.     OnMenu(w,0);
  420. }
  421.  
  422. int CheckMenu(int *class, int *code) {
  423.     register int TakeAction=0;
  424.     struct IntuiMessage *message;
  425.  
  426.     TakeAction=0;
  427.     *class=0;
  428.     *code=0;
  429.     
  430.     if(w->UserPort->mp_SigBit) {
  431.         message = (struct IntuiMessage *)GetMsg(w->UserPort);
  432.         if(message != NULL) {
  433.             *class = message->Class;
  434.             *code = message->Code;
  435.             ReplyMsg((struct Message *)message);
  436.             TakeAction=1;
  437.         }
  438.     return TakeAction;
  439.     }
  440. }
  441.  
  442. void CloseMenu(void) {
  443.     ClearMenuStrip(w);
  444. }
  445.  
  446.